Conversation
… failure mode named (the human maintainer 2026-05-01) The human maintainer 2026-05-01 verbatim: > i think you biggest failure mode is not updated claude.md > or pointers in that file, if you learn something claude.md > or a pointer from that file like the .claude/rules or some > other pointers, you didn't learn it Two landings in one commit: 1. **New CLAUDE.md ground-rule bullet** for the meta-rule itself — load-bearing learnings must land as: (a) CLAUDE.md bullet, (b) memory file + CLAUDE.md pointer, or (c) transitively via AGENTS.md/BP-NN/skill/agent. Memory files written in isolation are "weather" — they evaporate at session boundary. CLAUDE.md is loaded at every wake; files referenced from it are one read away; everything else is read-on-demand and effectively invisible. The bullet establishes a tick-close ritual: enumerate what was learned; classify landing per item; orphan items become next-tick speculative-work targets. Self-encoding test: this rule's own landing IS the CLAUDE.md bullet pointing at the memory file, recursively satisfying itself. 2. **Adds the missing SQLSharp-pattern pointer** — PR #1155 landed the SQLSharp bun/ts external-anchor memory file without a CLAUDE.md pointer. That file was a textbook example of the failure mode this rule names: a learning that didn't actually land at wake-time scope. New CLAUDE.md bullet for the SQLSharp pattern fixes the orphan and pre-applies the meta-rule's discipline. Adjacent companion landings (memory file + MEMORY.md row added per memory-index-integrity rule). Audit retrospective on the 2026-05-01 session named in the memory file: SQLSharp pattern (orphaned — fixed here), test.each-over-fixtures pattern (no substrate — speculative target), cherry-pick-when-squash-merged pattern (chat-only — speculative target), MEMORY.md duplicate-link audit lint existence (chat-only — speculative target). Each gap is filable as next-tick speculative work. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: aa5f1746a4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Pull request overview
Adds wake-time-loaded guidance to ensure new learnings are discoverable at session start by landing them in CLAUDE.md or via a CLAUDE.md pointer, and patches an earlier “orphaned” learning by adding a new wake-time bullet.
Changes:
- Adds a new memory memo defining the “learnings must land in
CLAUDE.mdor a pointer” meta-rule. - Updates
memory/MEMORY.mdto index the new memo. - Adds new
CLAUDE.mdwake-time bullets for (a) the meta-rule and (b) the SQLSharp TS DI pattern.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| memory/feedback_learnings_must_land_in_claude_md_or_pointer_aaron_2026_05_01.md | New memo documenting the landing meta-rule and its rationale. |
| memory/MEMORY.md | Adds the new memo to the memory index. |
| CLAUDE.md | Adds wake-time bullets for the meta-rule and SQLSharp TS DI pattern. |
…s-substrate-inventory bullet (review fixes + maintainer framing) Three fixes on PR #1160: (1) Codex P2 + Copilot P0 (duplicate findings): the SQLSharp DI pattern bullet pointed at memory/feedback_ts_dependencies_as_interface_di_pattern_sqlsharp_anchor_aaron_2026_05_01.md, which lives on PR #1155's branch (not yet merged to main). The CLAUDE.md pointer would dangle when #1160 lands. Fix: remove the SQLSharp bullet entirely from #1160. It can re-land as a follow-up PR after #1155 merges and the memory file is on main. Cleaner sequencing — each PR's pointer targets must exist on main at merge time. (2) Copilot: the meta-rule bullet quotes the human maintainer's verbatim message including ".claude/rules" — but Zeta doesn't currently have a `.claude/rules/` directory. Future readers might hunt for a path that doesn't exist locally. Fix: brief inline note clarifying that `.claude/rules/` IS canonical Anthropic per code.claude.com/docs/en/memory but Zeta uses `.claude/skills/`, `.claude/agents/`, `.claude/commands/`. Adopting `.claude/rules/` is a viable future addition. Per maintainer framing 2026-05-01: "we can do whatever here to get it right IDK the right answer it's probably play around a bit" — keeping the clarification open-ended rather than locking in a position. (3) Maintainer framing 2026-05-01: "it could just remind to you use the router as lookup of existing substrate, quick inventory via router." Add new ground-rule bullet: skill router as substrate inventory before authoring. Before writing a new memory file / rule / skill / agent / doctrine bullet, search the available-skills list AND `.claude/{skills,agents,commands,rules}/` on disk for substrate on the same topic. The router's description-keyed search IS Zeta's structured-substrate index; using it as inventory before authoring prevents the goldfish-ontology failure mode (recreating substrate that already exists). This bullet IS the wake-time encoding of the discipline so fresh sessions inherit it without primed prompting — per the buddy-test design constraint also from this maintainer input cluster: "you can't tell him in his prompt to use the skills as a prompt you have to give him a task that should trigger him to use an existing skill without telling him specifically and the claude.md should be sufficient for him to figure out skill router as substrate inventory." The new bullet's pointers verified to be either landing in this same PR or already on main: - feedback_learnings_must_land_*: this PR (#1160) adds it - feedback_otto_buddy_spin_up_*: already on main (Removed the loading-taxonomy reference since that memory file is on PR #1161's branch, not yet on main — same dangling-pointer discipline applied to the new bullet.) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…e-overlap axis (Otto 2026-05-01, 2x-confirmed) (#1166) When a PR branch goes DIRTY because main moved, the discriminating signal between traditional rebase and cherry-pick-supersede is line-region overlap (not file overlap alone). Worked examples this session: PR #1161 unmergeable on CLAUDE.md (intermediate merges in same region) → superseded via #1164 from fresh main; same tick PR #1155 clean rebase (no line overlap). Cherry-pick-supersede saves 10-30 minutes vs fighting cumulative conflicts. Memory file documents protocol, decision rule, two worked examples, and what NOT to do (bulk-copy old state regresses intermediate merges). Per the meta-rule (PR #1160), this is a load-bearing learning that needs CLAUDE.md scope or pointer. Memory file + MEMORY.md row landing pair-edit; CLAUDE.md pointer can be added in follow-up if rule proves to fire on more cases (currently 2x; promotion threshold tracked). Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…ate Zeta substrate discipline (the human maintainer 2026-05-01) Two industry-voice articles shared by the human maintainer 2026-05-01 — Addy Osmani 2026-04-19 (https://addyosmani.com/blog/agent-harness-engineering/) and Birgitta Böckeler / Martin Fowler 2026-04-02 (https://martinfowler.com/articles/harness-engineering.html) — independently arrive at framings that directly align with this session's architectural work. Five direct hits: (1) Osmani's 'Ratchet Pattern' (every line in AGENTS.md traces to a specific failure) IS our caused_by: frontmatter discipline. The discipline now has an industry-voice name. (2) Osmani's 'AGENTS.md under 60 lines, pilot's checklist not style guide' directly calibrates the MVP CLAUDE.md trim. Our current 576 lines / 27k bytes is an order of magnitude over Osmani's recommendation. (3) Osmani's multi-agent convergence (Claude Code + Cursor + Codex + Aider + Cline converge on harness patterns) validates the maintainer's multi-harness substrate-discovery framing as industry-payoff investment, not Zeta-specific. (4) Böckeler's two-dimension control taxonomy (Computational/Inferential × Guides/Sensors) maps cleanly to our hooks/lint/validators infrastructure. Useful audit framework for surfacing coverage gaps. (5) Böckeler's 'harness templates' concept maps to substrate-discovery.ts proposal in the loading-taxonomy memo. Memory file documents the alignment with worked-example mapping tables (Osmani components → Zeta counterparts; Böckeler matrix → our tools). MEMORY.md row added per index-integrity rule. Per the meta-rule (PR #1160), this load-bearing learning gets memory-file-with-pointer landing. CLAUDE.md pointer can be added as part of the MVP CLAUDE.md trim work — until then, this memo is router-discoverable. Carved candidate: 'Agent harness engineering is the discipline; the ratchet pattern is the loop; caused_by is the trace; convergence across harnesses is the validation. Every wake-time line earns its place by tracing to a specific failure.' Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ate substrate discipline (#1167) * memory(harness-engineering): Osmani + Böckeler external anchors validate Zeta substrate discipline (the human maintainer 2026-05-01) Two industry-voice articles shared by the human maintainer 2026-05-01 — Addy Osmani 2026-04-19 (https://addyosmani.com/blog/agent-harness-engineering/) and Birgitta Böckeler / Martin Fowler 2026-04-02 (https://martinfowler.com/articles/harness-engineering.html) — independently arrive at framings that directly align with this session's architectural work. Five direct hits: (1) Osmani's 'Ratchet Pattern' (every line in AGENTS.md traces to a specific failure) IS our caused_by: frontmatter discipline. The discipline now has an industry-voice name. (2) Osmani's 'AGENTS.md under 60 lines, pilot's checklist not style guide' directly calibrates the MVP CLAUDE.md trim. Our current 576 lines / 27k bytes is an order of magnitude over Osmani's recommendation. (3) Osmani's multi-agent convergence (Claude Code + Cursor + Codex + Aider + Cline converge on harness patterns) validates the maintainer's multi-harness substrate-discovery framing as industry-payoff investment, not Zeta-specific. (4) Böckeler's two-dimension control taxonomy (Computational/Inferential × Guides/Sensors) maps cleanly to our hooks/lint/validators infrastructure. Useful audit framework for surfacing coverage gaps. (5) Böckeler's 'harness templates' concept maps to substrate-discovery.ts proposal in the loading-taxonomy memo. Memory file documents the alignment with worked-example mapping tables (Osmani components → Zeta counterparts; Böckeler matrix → our tools). MEMORY.md row added per index-integrity rule. Per the meta-rule (PR #1160), this load-bearing learning gets memory-file-with-pointer landing. CLAUDE.md pointer can be added as part of the MVP CLAUDE.md trim work — until then, this memo is router-discoverable. Carved candidate: 'Agent harness engineering is the discipline; the ratchet pattern is the loop; caused_by is the trace; convergence across harnesses is the validation. Every wake-time line earns its place by tracing to a specific failure.' Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix(harness-engineering memo): time-qualify CLAUDE.md size claim — file grows tick-over-tick (Copilot) Two Copilot review threads on PR #1167: CLAUDE.md size claims (576 lines / 27k bytes) drift quickly as new ground-rule bullets land each tick. Fix: replace specific numbers with time-qualified phrasing — '~576 lines / ~27k bytes when memo authored 2026-05-01; grows each tick; verify current state with wc -l before citing.' The directional claim (order-of-magnitude over Osmani's 60-line target, on the way to Anthropic's 40k threshold) is stable and load-bearing; exact counts are not. Lesson: in a fast-moving substrate, claims about substrate size should be time-qualified or directional, not exact. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…ntal invariant + two-layer print DX (Phase 1 verbatim + memo + CLAUDE.md pointer) (#1171) Claude.ai shared a major feedback packet 2026-05-01: 'Backlog-Driven Dual-PM Agent Loop with Refresh Discipline — Carved Handoff'. Per the substrate-or-it-didn't-happen verbatim-preservation trigger (architecture-changing + multi-AI review), preserved verbatim at docs/research/ BEFORE summarizing. Phase 1 absorption (this commit): 1. **docs/research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md** — verbatim packet preserved with the four required header fields per GOVERNANCE §33 (Scope / Attribution / Operational status / Non-fusion disclaimer). 2. **New memory file** capturing the refresh-before-decide invariant + two-layer print DX as load-bearing — the piece the human maintainer flagged as 'the part most worth flagging for Otto specifically.' Documents 4 mandatory refresh triggers (tick selection / post-merge / session start / maintainer challenge) + raw-then-interpretation print discipline + the cheap-to-run requirement. Composes with substrate-or-it-didn't-happen (Otto-363) and BLOCKED-with-green-CI investigation rule (special case of refresh-before-decide). 3. **CLAUDE.md ground-rule bullet** at wake-time scope — first bullet because it's the upstream invariant other disciplines depend on. Points at the memo + verbatim packet for full reasoning. Per the meta-rule (PR #1160), load-bearing learning at wake-time scope. 4. **MEMORY.md row** for the new memory file (pair-edit per index-integrity rule). Phase 2 absorption (deferred): the packet's 22 named failure modes, externalized proxy metrics framework, Mirror/Beacon ratio gate, convergence definitions — each is its own potential substrate landing as failures or patterns surface organically. Empirical Otto-pattern this session that motivates the rule: I have repeatedly acted on stale derived state (citing prior-tick PR thread counts, believing memory over fresh poll, predicting rebase outcomes from cached file-overlap knowledge). The cure was the same every time: refresh was cheap (poll-pr-gate-batch.ts), should have refreshed again before deciding. The tool existed; the discipline of using it before tick decisions didn't have explicit wake-time framing. Now it does. Worked example already in substrate: tools/github/poll-pr-gate-batch.ts produces both raw (per-PR GateReport[]) and interpretation (summary aggregate) layers — the two-layer print pattern is operational, this rule names the discipline. Sources: - Claude.ai 2026-05-01 packet (verbatim) - The human maintainer 2026-05-01 standalone framing in same packet Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Summary
The human maintainer 2026-05-01 named the biggest failure mode I've been hitting: when I learn something, if it doesn't land in CLAUDE.md or a file pointed at from CLAUDE.md, I haven't actually learned it. The lesson stays in chat context (volatile) or in a memory file (read-on-demand) but doesn't become wake-time-loaded substrate that future-Otto inherits.
Two landings, one commit
1. New CLAUDE.md wake-time bullet for the meta-rule itself. Joins the ground-rules section alongside verify-before-deferring, future-self-not-bound, never-be-idle, version-currency, substrate-or-it-didn't-happen. The bullet establishes a tick-close ritual: enumerate what was learned; classify landing (bullet ✓ / memory file with pointer ✓ / transitive ✓ / orphan ✗); orphan items become next-tick speculative targets.
Self-encoding test: the rule's own landing IS this CLAUDE.md bullet pointing at the new memory file, recursively satisfying itself. Without the bullet, the memory file would be a textbook example of the failure mode it names.
2. Adds the missing SQLSharp-pattern pointer. PR #1155 landed the SQLSharp bun/ts memory file without a CLAUDE.md pointer — exactly the orphan case the meta-rule targets. New bullet for the SQLSharp pattern (super-strongly-typed dependencies-as-interface DI, not js-in-ts failure mode) fixes the orphan + pre-applies the meta-rule's discipline.
Audit retrospective
Documented in the memory file's Why-3 section. 2026-05-01 session learnings, classified:
Each remaining ✗ is filable as next-tick speculative work per never-be-idle.
Test plan
🤖 Generated with Claude Code